package com.springboot.ww.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 包裹主表实体类
 *
 * @author ZHKJ
 * @since 2020-12-01
 */
@Data
@TableName("oms_package_main")
@EqualsAndHashCode(callSuper = true)
@ApiModel(value = "PackageMain对象", description = "包裹主表")
public class PackageMain extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 包裹号
     */
    @ApiModelProperty(value = "包裹号")
    private String packageCode;

    /**
     * OMS订单号
     */
    @ApiModelProperty(value = "OMS订单号")
    private String omOrderId;

    /**
     * 平台订单号
     */
    @ApiModelProperty(value = "平台订单号")
    private String platOrderId;

    /**
     * 平台编码
     */
    @ApiModelProperty(value = "平台编码")
    private String platformCode;

    /**
     * 站点编码
     */
    @ApiModelProperty(value = "站点编码")
    private String siteCode;

    /**
     * 店铺编号
     */
    @ApiModelProperty(value = "店铺编号")
    private String storeCode;

    /**
     * 订单类型【0-线上订单 1-手工订单  2-批发单】
     */
    @ApiModelProperty(value = "订单类型【0-线上订单 1-手工订单  2-批发单 3-手工订单-仓发  3-手工订单-JIT】")
    private Integer orderType;

    /**
     * 包裹状态：0-待审核检测,1-待审核,2-待渠道检测,3-渠道异常,4-待缺货检测,5-缺货包裹, 6=>待推送,7=>已推送,8=>推送失败,9=>已发货,10=>已退件，11-已撤单，12-已删除, 13-WMS拦截待审核, 14-退货待重发
     */
    @ApiModelProperty(value = "包裹状态：0-待审核检测,1-待审核,2-待渠道检测,3-渠道异常,4-待缺货检测,5-缺货包裹, 6=>待推送,7=>已推送,8=>推送失败,9=>已发货,10=>已退件，11-已撤单，12-已删除")
    private Integer packageStatus;

    /**
     * 主销售userId
     */
    @ApiModelProperty(value = "主销售userId")
    private Long mainSellerId;

    /**
     * 主客服userId
     */
    @ApiModelProperty(value = "主客服userId")
    private Long mainCustomerServiceId;

    /**
     * 仓库编码
     */
    @ApiModelProperty(value = "仓库编码")
    private String warehouseCode;

    /**
     * 渠道编码
     */
    @ApiModelProperty(value = "渠道编码")
    private String channelCode;

    /**
     * 是否负利润:0-N,1-Y
     */
    @ApiModelProperty(value = "是否负利润:0-N,1-Y")
    private Integer ifProfit;

    /**
     * 是否选定为线上渠道 0否 1是
     */
    @ApiModelProperty(value = "1是线上渠道，2是线下渠道")
    private Integer ifOnlineChannel;


    /**
     * 是否海外仓: 0否, 1是
     */
    @ApiModelProperty(value = "是否海外仓: 0否, 1是")
    private Integer ifOversea;

    /**
     * 偏远费用（> 0 说明该包裹为偏远地区包裹）
     */
    @ApiModelProperty(value = "偏远费用（> 0 说明该包裹为偏远地区包裹）")
    private BigDecimal remoteFee;

    /**
     * 待审核类型：0-无,1-负利润,2-撤单恢复待确认,4-补单包裹,8-特殊渠道待审核,16-偏远包裹,32-无渠道包裹,64-超重包裹,128-待撤单包裹
     */
    @ApiModelProperty(value = "待审核类型：0-无,1-负利润,2-撤单恢复待确认,4-补单包裹,8-特殊渠道待审核,16-偏远包裹,32-无渠道包裹,64-超重包裹,128-待撤单包裹")
    private Integer exceptionType;

    /**
     * 异常原因
     */
    @ApiModelProperty(value = "异常原因")
    private String exceptionMsg;

    /**
     * 撤单类型:0-非撤单状态,1-客服撤单,2-渠道变更,3-买家信息变更,4-SKU变更,5-SKU缺货,6-超期订单,7-重量超出渠道限制,8-亏本撤单,9-黑名单撤单,10-无渠道,11-平台撤单,12-转仓撤单,13-SKU下架,14-其它
     */
    @ApiModelProperty(value = "撤单类型:0-非撤单状态,1-客服撤单,2-渠道变更,3-买家信息变更,4-SKU变更,5-SKU缺货,6-超期订单,7-重量超出渠道限制,8-亏本撤单,9-黑名单撤单,10-无渠道,11-平台撤单,12-转仓撤单,13-SKU下架,14-其它")
    private Integer cancelType;

    /**
     * 撤单操作人
     */
    @ApiModelProperty(value = "撤单操作人")
    private Long cancelUserId;

    /**
     * 包裹最后一次恢复人
     */
    @ApiModelProperty(value = "包裹最后一次恢复人")
    private Long recoverUserId;

    /**
     * 0-平台已撤单oms自动撤单失败,1-平台已撤单oms自动撤单成功,2-自动撤单规则撤单失败,3--自动撤单规则撤单成功
     */
    @ApiModelProperty(value = "0-平台已撤单oms自动撤单失败,1-平台已撤单oms自动撤单成功,2-自动撤单规则撤单失败,3--自动撤单规则撤单成功")
    private Integer sysCancelRslt;

    /**
     * 是否曾经系统撤单成功,大于0表示曾经系统撤单成功，即使恢复订单，也不会再执行任何系统自动撤单: 1-smt线上渠道超期撤单,2-EUB渠道超期撤单,3-云途渠道超期撤单
     */
    @ApiModelProperty(value = "是否曾经系统撤单成功,大于0表示曾经系统撤单成功，即使恢复订单，也不会再执行任何系统自动撤单: 1-smt线上渠道超期撤单,2-EUB渠道超期撤单,3-云途渠道超期撤单")
    private Integer ifOnceSysCancel;

    /**
     * 税号
     */
    @ApiModelProperty(value = "税号")
    private String taxNumber;

    /**
     * 发票url
     */
    @ApiModelProperty(value = "发票url")
    private String invoiceUrl;

    /**
     * 是否确认撤销0 否 1 是 默认 0
     */
    @ApiModelProperty(value = "是否确认撤销0 否 1 是 默认 0")
    private Integer confirmCancel;

    /**
     * 是否是补充订单  1:添加包裹 0:不是 2:退件重发包裹
     */
    @ApiModelProperty(value = "是否是补充订单  1:是 0:不是 2:退件重发包裹")
    private Integer ifSupplementPackage;

    /**
     * 包裹识别码
     */
    @ApiModelProperty(value = "包裹识别码")
    private String sidCode;

    /**
     * 公司id
     */
    @ApiModelProperty(value = "公司id")
    private String companyId;

    /**
     * 标记状态
     */
    private Integer markStatus;

    /**
     * 是否恢复: 0否, 1是
     */
    @ApiModelProperty(value = "是否恢复: 0否, 1是")
    private Integer ifRecovery;

    /**
     * 退货待重发子状态
     */
    private Integer waitingResendReturnedStatus;
    /**
     * 是否自动撤单:0-N,1-Y
     */
    @ApiModelProperty(value = "是否自动撤单:0-N,1-Y")
    private Integer ifAutoCancel;

    private Long nwDwgId;

    @ApiModelProperty(value = "推送wms失败次数")
    private Integer pushWmsFailedTimes;

    @ApiModelProperty(value = "上一次缺货时间")
    private Date lastOutStockTime;

    @ApiModelProperty(value = "虚拟仓")
    private String virtualWarehouseCode;

    @ApiModelProperty(value = "第三方仓渠道编码")
    private String externalChannelCode;

    @ApiModelProperty(value = "是否虚仓")
    private Integer ifVirtual;

    @ApiModelProperty(value = "目的国")
    private String purposeCountry;

    @ApiModelProperty(value = "规则ID")
    private Long ruleId;

    @ApiModelProperty(value = "预报请求id")
    private String forecastReqId;

    @ApiModelProperty(value = "是否需要从新生成请求id")
    private Integer forecastReqFlag;

    /**
     * 是否修改了收件人信息
     */
    private Boolean receiverInfoModifiedMarkForAudit;

    @ApiModelProperty(value = "是否推送至IMS")
    private Integer ifPushIms;

    /**
     * 分销包裹(0否,1是)
     */
    private Boolean ifDistributionPackage;

    /**
     * 是否多包裹订单(0否,1是)-仅限自动拆包和WMS回调拆包
     */
    private Boolean ifMultiPkg;

    /**
     * 是否允许恢复
     */
    private Boolean ifCanRecover;

    @ApiModelProperty(value = "冻结前的包裹状态")
    private Integer beforeFrozenStatus;

    /**
     * 是否自提，1是 0否
     */
    private Boolean ifSelfDelivery;

    /**
     * 渠道类型 0快递 2平邮 1挂号
     */
    private Integer channelType;

    @ApiModelProperty(value = "是否是新的负利润审核 1是 0否 (海外仓在缺货检测后计算)")
    private Integer ifNewProfit;

    /**
     * 是否缺货
     */
    private Integer ifOutOfStock;

    /**
     * 是否使用原渠道
     */
    private Integer ifUseOriginalChannel;

    /**
     * 是否允许拆包
     */
    private Boolean ifPermitSplitPackage;

    /**
     * 出库拦截类型 json类型
     */
    private String outInterceptType;

    /**
     * 是否为营销订单
     */
    private Integer ifMarketingOrder;

    /**
     * 特殊订单 -1未知  0-平台发货  1 自发货
     */
    private Integer specialOrderType;

    /**
     * 是否提前推送预报 0未推 1 已推  2 成功
     */
    private Integer manualPushForecast;

    /**
     * 包裹 退款拦截标识
     * 标识为true
     * 泽汇海外仓订单  会推送给泽汇海外仓系统、通知泽汇海外仓出库拦截
     * 国内仓订单 出库扫描时 会对应出库拦截规则、出库拦截规则中配置有该字段=true
     */
    private Boolean refundIntercept;

    /**
     * 包裹阈值重量 单位kg
     */
    private BigDecimal weightThreshold;

    /**
     * 包裹最小阈值重量 单位kg
     */
    private BigDecimal weightMinThreshold;

    /**
     * 出库重量审核 0:未审核  1:已审核(负利润) 2:已审核(负利润与其它拦截异常)
     */
    private Integer outWeightAudit;

    /**
     * 是否样品  是否样品（0：否 1：是）
     */
    @ApiModelProperty("是否样品")
    private Integer isSampleOrder;
}
